//
//  WBNetworkingManager.swift
//  传智新浪微博
//
//  Created by app on 17/7/17.
//  Copyright © 2017年 app. All rights reserved.
//

import UIKit
import AFNetworking

/// Swift 的枚举支持任意数据类型
/// Switch / enum 在 OC 中都只支持整数
enum WBHTTPMethod {
    case GET
    case POST
}

/// 网络管理工具
class WBNetworkingManager: AFHTTPSessionManager {

    /// 单例
    /// 静态区 / 常量 / 闭包 
    /// 在第一次访问时, 执行闭包，且将结果保存在 shared 常量中
    static let shared = WBNetworkingManager()
    
    /// 使用一个函数封装 AFN 的 GET / POST 请求
    /// <#Description#>
    ///
    /// - Parameters:
    ///   - method:       GET / POST
    ///   - URLString:    URLString
    ///   - parameters:   参数字典
    ///   - completation: 完成回调[json(字典/数组)，是否成功]
    func request(method: WBHTTPMethod, URLString: String, parameters: [String: AnyObject], completation: @escaping (_ json: AnyObject?, _ isSuccess: Bool)->()) {
        
        // 闭包
        // 成功回调
        let success = { (task: URLSessionDataTask, json: Any)->() in
            
            completation(json as AnyObject?, true)
        }
        // 失败回调
        let failure = { (task: URLSessionDataTask?, error: Error)->() in
            
            // error 通常比较吓人，例如编号：xxxx，错误原因一堆英文
            print("网络请求错误 \(error)")
            completation(nil, false)
        }
        
        
        if method == .GET {
            
            get(URLString, parameters: parameters, progress: nil, success: success, failure: failure)
        } else {
            
            post(URLString, parameters: parameters, progress: nil, success: success, failure: failure)
        }
        
        
    }
}
